﻿#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"LED.h"
//static修饰局部变量---函数结束static局部变量的空间不被销毁
//static局部变量只会初始化一次
//void test()
//{
//	int i = 0;
//	i++;
//	printf("%d ", i);
//}
//int main()
//{
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		test();
//		test();
//
//	}
//	return 0;
//}
//区别：static修饰局部变量,函数不被摧毁
//void test()
//{
//	static int i = 0;
//	i++;
//	printf("%d ", i);
//}
//int main()
//{
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		test();
//		test();
//
//	}
//	return 0;
//}
//static修饰全局变量--仅仅可以在static的那个模块或者文件内使用
//extern int g_val;
//int main()
//{
//	printf("%d\n", g_val);
//	return 0;
//}

//static修饰函数--仅仅可以在static的那个模块或者文件内使用
//extern int Add(int x, int y);
//int main()
//{
//	printf("%d\n", Add(2, 3));
//	return 0;
//}

//动态内存申请
//需要空间的时候申请，使用完可以将该空间释放掉。-- - 堆区 --人为申请，人为释放
//功能： 在堆区申请size个字节大小的空间，将首地址返回。
//int main()
//{
//	int *p=(int *)malloc(sizeof(int));//p指向动态内存申请的一块空间
//	if (p == NULL)
//	{
//		return 0;
//	}
//	// 操作指针指向的空间
//	*p = 30;
//	printf("%d", *p);
//	//释放空间：
//	free(p);// 指针指向的空间
//	p = NULL;// 为了避免野指针
//}
//练习：
//int main()
//{
//	int i;
//	int* q = (int*)malloc(sizeof(int) * 4); //p指向动态内存申请的第一块空间
//	if (q == NULL)
//	{
//		printf("申请失败\n");
//		return 0;
//	}
//	for (i = 0; i < 4; i++)
//	{
//		scanf("%d",q+i);
//	}
//	for (i = 0; i < 4; i++)
//	{
//		printf("%d ", *(q + i));
//	}
//	free(q);
//	q = NULL;
//}

//结构体
typedef struct books
{
	int ref;//编号
	char name[30];//书名
	char author[20];//作者
	float price;//价格
	int hot;//热度
	int stock;//库存
}BK;
//（1）通过"结构体变量名."直接访问来操作
//1、直接赋值
//int main()
//{
//	struct books text;
//	text.ref = 2121;
//	strcpy(text.name, "D语言");
//	strcpy(text.author, "温龙鑫");
//	text.price = 167;
//	text.hot = 0;
//	text.stock = 99;
//	printf("购书清单：\n");
//	printf("编号    书名    作者      价格    热度   库存\n");
//	printf("%d   %s    %s    %.2f    %d    %d", text.ref, text.name, text.author, text.price, text.hot, text.stock);
//}
//2、输入赋值
//int main()
//{
//	struct books text;
//	printf("请输入编号：");
//	scanf("%d", &text.ref);
//	printf("请输入书名：");
//	scanf("%s", text.name);
//	printf("请输入作者：");
//	scanf("%s", text.author);
//	printf("请输入价格：");
//	scanf("%f", &text.price);
//	printf("请输入热度：");
//	scanf("%d", &text.hot);
//	printf("请输入库存：");
//	scanf("%d", &text.stock);
//
//	printf("编号：%d 书名：%s 作者：%s 价格：%.2f 热度：%d 库存：%d",text.ref ,text.name, text.author, text.price ,text.hot ,text.stock );
//}
//（2）通过指针“p->”间接访问来操作
//1、直接赋值
//int main()
//{
//	struct books text;
//	struct books* p = &text;
//	p->ref = 2121;
//	strcpy(p->name, "D语言");
//	strcpy(p->author, "温龙鑫");
//	p->price = 167;
//	p->hot = 0;
//	p->stock = 99;
//	printf("购书清单：\n");
//	printf("编号    书名    作者      价格    热度   库存\n");
//	printf("%d   %s    %s    %.2f    %d    %d", p->ref, p->name, p->author, p->price, p->hot, p->stock);
//}
//2、输入赋值
//int main()
//{
//	struct books text;
//	struct books* p = &text;
//	printf("请输入编号：");
//	scanf("%d", &p->ref);
//	printf("请输入书名：");
//	scanf("%s", p->name);
//	printf("请输入作者：");
//	scanf("%s", p->author);
//	printf("请输入价格：");
//	scanf("%f", &p->price );
//	printf("请输入热度：");
//	scanf("%d", &p->hot);
//	printf("请输入库存：");
//	scanf("%d", &p->stock);
//	printf("编号：%d 书名：%s 作者：%s 价格：%.2f 热度：%d 库存：%d", p->ref, p->name, p->author, p->price, p->hot, p->stock);
//}
//指针对指针进行赋值就是两个指针同指向的意思。
//int main()
//{
//	BK s1 = { 12,"C语言","qhq",99,800,90 };
//	BK s2;
//	
//	BK* p1 = &s1;
//	BK* p2 ;
//	p2 = p1;
//	printf("编号：%d 书名：%s 作者：%s 价格：%.2f 热度：%d 库存：%d\n", p1->ref, p1->name, p1->author, p1->price, p1->hot, p1->stock);
//	printf("编号：%d 书名：%s 作者：%s 价格：%.2f 热度：%d 库存：%d", p2->ref, p2->name, p2->author, p2->price, p2->hot, p2->stock);
//
//}
// 结构体变量能整体赋值
//int main()
//{
//	BK p1 = { 12,"C","qin",28,99,199 };
//	BK p2 = { 11,"C++","qinnn",29,100,200};
//	BK temp = p1;
//	p1 = p2;
//	p2 = temp;
//	printf("编号：%d 书名：%s 作者：%s 价格：%.2f 热度：%d 库存：%d\n", p1.ref, p1.name, p1.author, p1.price, p1.hot, p1.stock);
//	printf("编号：%d 书名：%s 作者：%s 价格：%.2f 热度：%d 库存：%d", p2.ref, p2.name, p2.author, p2.price, p2.hot, p2.stock);
//}
//申请一个结构体空间使用指针指向它，通过指针对成员进行操作。
//int main()
//{
//	BK* p = (BK*)malloc(sizeof(BK));
//	if (p == NULL)
//	{
//		return 0;
//	}
//	printf("请输入编号：");
//	scanf("%d", &p->ref);
//	printf("请输入书名：");
//	scanf("%s", p->name);
//	printf("请输入作者：");
//	scanf("%s", p->author);
//	printf("请输入价格：");
//	scanf("%f", &p->price );
//	printf("请输入热度：");
//	scanf("%d", &p->hot);
//	printf("请输入库存：");
//	scanf("%d", &p->stock);
//	printf("编号：%d 书名：%s 作者：%s 价格：%.2f 热度：%d 库存：%d", p->ref, p->name, p->author, p->price, p->hot, p->stock);
//	free(p);
//	p = NULL;
//}
//结构体数组
int main()
{
	BK arr[3] = {
		{011,"A语言","wlx",99,100,90},
		{012,"B语言","wlx",108,100,91},
		{013,"C语言","wlx",119,100,92},
	};
	printf("购书清单：\n");
	printf("编号    书名    作者      价格    热度   库存\n");
	printf("%d       %s    %s      %.2f    %d    %d\n", arr[0].ref , arr[0].name, arr[0].author, arr[0].price, arr[0].hot, arr[0].stock);
	printf("%d      %s    %s      %.2f   %d    %d\n", (*(arr+1)).ref, (*(arr + 1)).name, (*(arr + 1)).author, (*(arr + 1)).price, (*(arr + 1)).hot, (*(arr + 1)).stock);
	printf("%d      %s    %s      %.2f   %d    %d\n", (arr + 2)->ref, (arr + 2)->name, (arr + 2)->author, (arr + 2)->price, (arr + 2)->hot, (arr + 2)->stock);

}